package persistence;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import model.*;

public class PersistenciaItemServicio {
	
	private static PersistenciaItemServicio instancia;
	
	public static PersistenciaItemServicio getInstancia()
	{
		if (instancia== null)
			instancia =new PersistenciaItemServicio();
		return instancia;
	}

	public ItemServicio getItemServicio (Integer id_serv) //HECHO
	{
		ItemServicio item = null; 
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		
		try
		{
			String senten = "SELECT id, descripcion, cantidad, moneda, precio, ocupacion, impuestos "
					+ "FROM ItemServicio "
					+ "WHERE id = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,id_serv);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{						
				item = new ItemServicio(
						result.getInt("id")
						, result.getString("descripcion")
						, result.getInt("cantidad")						
						, result.getFloat("precio")
						, result.getInt("ocupacion")
						, result.getFloat("impuestos")
						, result.getString("moneda")
						);								
			}
			
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return item;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al consultar Item Servicio: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	      return item;
	}
	
	public ArrayList<ItemServicio> getItems(Integer id_serv) //HECHO
	{		
		ArrayList<ItemServicio> items = new ArrayList<ItemServicio>();
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		try
		{
			String senten = "SELECT id, descripcion, cantidad, moneda, precio, ocupacion, impuestos "
					+ "FROM ItemServicio "
					+ "WHERE id_serv = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, id_serv);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{										
				items.add(new ItemServicio(
						result.getInt("id")
						, result.getString("descripcion")
						, result.getInt("cantidad")						
						, result.getFloat("precio")
						, result.getInt("ocupacion")
						, result.getFloat("impuestos")
						, result.getString("moneda")
						)
				);
			}			
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return items;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al consultar Items Servicio: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	      return items;
	}
	
	public ItemServicio insertItemServicio(ItemServicio item, Integer id_serv) //HECHO
	{
		int newId=0;
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		String senten = null;
		try
		{					
			senten = "INSERT INTO ItemServicio (id_serv, descripcion, cantidad, moneda, precio, ocupacion, impuestos) "
					+ "VALUES (?,?,?,?,?,?,?)";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten, Statement.RETURN_GENERATED_KEYS);
			ps.setInt(1, id_serv);
			ps.setString(2, item.getDescripcion());
			ps.setInt(3, item.getCantidad());
			ps.setString(4, item.getMoneda());
			ps.setFloat(5, item.getPrecio());
			ps.setInt(6, item.getOcupacion());
			ps.setFloat(7, item.getImpuestos());
			ps.execute();
			ResultSet  generatedKeys = ps.getGeneratedKeys();
			if(generatedKeys.next())
			{	
				newId = generatedKeys.getInt(1);
			}
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			item.setId(newId);
			return item;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al Insertar Item Servicio: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
		return item;
	}

	public void eliminarItemServicio(ItemServicio item) //HECHO
	{
		Connection con = PoolConexiones.getPoolConexiones().getConnection();				
		try
		{
			String senten = "DELETE FROM ItemServicio "
					+ "WHERE id = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,item.getId());	
			ps.executeUpdate();
			con.commit();
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al eliminar Item Servicio: " + e.getMessage());
				e.printStackTrace();
				try{
					if(con!=null)
			            con.rollback();
				}catch( SQLException e2){
					e2.printStackTrace();
				}
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	}

	public ItemServicio guardarItemServicio(ItemServicio item) //HECHO
	{
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		String senten = null;
		try
		{
			senten = "UPDATE ItemServicio SET "
					+ "descripcion = ?,"
					+ "cantidad = ?,"
					+ "moneda = ?,"
					+ "precio = ?,"
					+ "ocupacion = ?,"
					+ "impuestos = ? "
					+ "WHERE id = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, item.getDescripcion());
			ps.setInt(2, item.getCantidad());
			ps.setString(3, item.getMoneda());
			ps.setFloat(4, item.getPrecio());
			ps.setInt(5, item.getOcupacion());
			ps.setFloat(6, item.getImpuestos());
			ps.setInt(7, item.getId());
			ps.execute();
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return item;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al actualizar Item Servicio: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
		return item;
	}

}
